package math;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class _01巧用进制解天平问题 {
    /**
     * 问题描述：
     * 用天平称重时，我们希望用尽可能少的砝码组合称出尽可能多的重量。
     * 如果只有5个砝码，重量分别是1，3，9，27，81。则它们可以组合称出1到121之间任意整数重量（砝码允许放在左右两个盘中）。
     * 本题目要求编程实现：对用户给定的重量，给出砝码组合方案。
     * 例如：
     * 用户输入：
     * 5
     * 程序输出：
     * 9-3-1
     * 用户输入：
     * 19
     * 程序输出：
     * 27-9+1
     */
    //将目标值转为3进制，遇2加1进位，自己变成-1
    //三进制各位上，1代表使用，-1代表减去，0无代表意义
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //将目标数字转为三进制
        final String x = Integer.toString(n, 3);
        char[] c = new StringBuilder(x).reverse().toString().toCharArray();
        //容器存放处理后的0 -1 1
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == '2') {
                list.add(0, -1);//逆序表示，将进位后的位置变为-1，插在开头
                if (i == c.length - 1) {
                    list.add(0, 1);//当二进制表示的数组走完，直接进位
                }else {
                    ++c[i+1]; //对下一个数字加1
                }
            }else if (c[i] == '3'){
                list.add(0,0);  //遇到三直接变0，更高位直接插1
                if (i == c.length -1){
                    list.add(0,1);
                }else {
                    ++c[i+1];
                }
            }else {
                list.add(0,c[i] - '0'); // 将剩余的字符转为数字
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) == 1) sb.append("+").append((int) Math.pow(3, list.size() - i - 1));
            if (list.get(i) == -1) sb.append("-").append((int) Math.pow(3, list.size() - i - 1));
        }
        System.out.println(sb.substring(1));
    }
}
